
def leerConj(na,A, a):
    A.append([])
    A[0]=(raw_input(a+"[0]: "))
    n=1
    while n<na:
        A.append([])
        A[n]=(raw_input(a+"[%d]: " %(n)))
        i=0
        esta=False
        while i<n and not esta:
            if A[i]==A[n]:
                esta=True
            i+=1
        if esta:
            print "Ya ingresaste este elemento"
        else:
            n+=1

def imprimir(na,A,a):
    print a+" ={",
    for i in range(na):
        print A[i],
    print "}"

def busqueda(na,A,x):
    i=0
    noesta=True
    p=-1
    while i<na and noesta:
        if A[i]==x:
            p=i
            noesta=False
        i+=1
    if noesta:
        p=-1
        return p
    else:
        return p
    
def eliminar( n,A,a,x):
    global na,nb
    ordenar(n,A)
    p=busqueda(n,A,x)
    if p==-1:
        print "Elemento no pertenece al conjunto"
        imprimir(n,A,a)
    else:
        while p<n-1:
            A[p]=A[p+1]
            p+=1
        n =n-1
        if a=="A":
            na=n
        else:
            nb=n
        print "El nuevo conjunto es: "
        imprimir(n,A,a)
    return

def insertar(n,A,a,x):
    global na,nb
    ordenar(n,A)
    p=busqueda(n,A,x)
    if p==-1:
        A.append([])
        A[n]=x
        n += 1
        if a=="A":
            na=n
        else:
            nb=n
        print "El nuevo conjunto es: "
        imprimir(n,A,"A")
    else:
        print "Elemento ya pertenece al conjunto"
        imprimir(n,A,"A")
    
             
    
def ordenar(na,A):
    i=na-1
    esta=True
    while i>0:
        esta=False
        j=0
        while j<i:
            if A[j]>A[j+1]:
                temp=A[j]
                A[j]=A[j+1]
                A[j+1]=temp
                esta=True
            j+=1
        i-=1

def union(na,A,nb,B):
    print "La Union es:",
    for i in range(na):
        print A[i],
    for j in range(nb):
        k=0
        esta=True
        while(k<na and esta):
            if(B[j]==A[k]):
                esta=False
            k+=1
        if esta:
            print B[j],
    print ""

            
def interseccion(na,A,nb,B):
    n=0
    print "Interseccion:",
    for i in range (na):
        for j in range (nb):
            if A[i]==B[j]:
                n+=1
                print B[j],
                break
                
    if n==0:
        print "VACIO",
    print ""
    
def diferencia(na,A,nb,B):
    n=0
    print "La diferencia es:",
    for i in range(na):
        j=0
        esta=True
        while j<nb and esta:
            if A[i]==B[j]:
                esta=False
            j+=1
        if esta:
            n+=1
            print A[i],
    if n==0:
        print "VACIO",
    print ""
    
def difSimetrica(na,A,nb,B):
    print "La diferencia simetrica es: ",
    n=0
    
    for i in range(na):
        j=0
        esta=True
        while j<nb and esta:
            if A[i]==B[j]:
                esta=False
            j+=1
        if esta:
            n+=1
            print A[i],
            j+=1
    
    for i in range(nb):
        j=0
        esta=True
        while j<na and esta:
            if B[i]==A[j]:
                esta=False
            j+=1
        if esta:
            n+=1
            print B[i],
    if n==0:
        print "VACIO",
    print ""

def menu():
    print "Menu Principal:"
    print "1) Ingresar Conjuntos"
    print "2) Eliminar Elemento"
    print "3) Insertar Elemento"
    print "4) Operaciones"
    print "0) Salir"


A=[]
B=[]

leer = False

print"---------------------------------------------------------------------------"
print"                              CONJUNTOS"
print"---------------------------------------------------------------------------"

while 1:
    menu()
    op=int(raw_input("Opcion: "))
    while op<0 or op>4:
         op=int(raw_input("Ingrese opcion entre 0 y 4: "))
    print"---------------------------------------------------------------------------"

    if op==1:
        na=int(raw_input("Ingrese numero de elementos de A: "))
        while na<=0:
            na=int(raw_input("Ingrese numero de elementos A mayor a cero: "))
        leerConj(na,A,"A")
        nb=int(raw_input("Ingrese numero de elementos de B: "))
        while nb<=0:
            nb=int(raw_input("Ingrese numero de elementos B mayor a cero: "))
        leerConj(nb,B,"B")
        print "Conjuntos ingresados: "
        imprimir(na,A,"A")
        imprimir(nb,B,"B")
        print"---------------------------------------------------------------------------"
        leer=True

    elif op==2:
        if leer:
            print "Eliminar:"
            print "1) Eliminar elemento del conjunto A"
            print "2) Eliminar elemento del conjunto B"
            opc=int(raw_input("Opcion: "))
            while opc<1 or opc>2:
                opc=int(raw_input("Ingrese opcion 1 o 2: "))
            x=(raw_input("Ingrese elemento a eliminar: "))
            if opc==1:
                eliminar(na,A,"A",x)
            else:
                eliminar(nb,B,"B",x)
            print"---------------------------------------------------------------------------"
        else:
            print "Debe ingresar conjuntos"
            print"---------------------------------------------------------------------------"
                          
    elif op==3:
        if leer:
            print "Insertar:"
            print "1) Insertar elemento del conjunto A"
            print "2) Insertar elemento del conjunto B"
            opc=int(raw_input("Opcion: "))
            while opc<1 or opc>2:
                opc=int(raw_input("Ingrese opcion 1 o 2: "))
            x=(raw_input("Ingrese elemento a insertar: "))
            if opc==1:
                insertar(na,A,"A",x)
            else:
                insertar(nb,B,"B",x)
            print"---------------------------------------------------------------------------"
        else:
            print "Debe ingresar conjuntos"
            print"---------------------------------------------------------------------------"
            
    elif op==4:
        if leer:
            operaciones=True
            while operaciones:
                print "Operaciones:"
                print "1) Union"
                print "2) Interseccion"
                print "3) Diferencia"
                print "0) Menu Principal"
                opc=int(raw_input("Opcion: "))
                while opc<0 or opc>3:
                    opc=int(raw_input("Ingrese opcion  entre 0 y 3: "))
                print"---------------------------------------------------------------------------"
                if opc==1:
                    union(na,A,nb,B)
                    print"---------------------------------------------------------------------------"
                elif opc==2:
                    interseccion(na,A,nb,B)
                    print"---------------------------------------------------------------------------"
                elif opc==3:
                    dif=True
                    while dif:
                        print "Diferencia: "
                        print "1) Diferencia A-B"
                        print "2) Diferencia B-A"
                        print "3) Complemento A"
                        print "4) Complemento B"
                        print "5) Diferencia simetrica"
                        print "0) Menu operaciones"
                        opc=int(raw_input("Opcion: "))
                        while opc<0 or opc>5:
                            opc=int(raw_input("Ingrese opcion  entre 0 y 5: "))
                        print"---------------------------------------------------------------------------"
                        if opc==1:
                            diferencia(na,A,nb,B)
                            print"---------------------------------------------------------------------------"
                        elif opc==2:
                            diferencia(nb,B,na,A)
                            print"---------------------------------------------------------------------------"
                        elif opc==3:
                            diferencia(nb,B,na,A)
                            print"---------------------------------------------------------------------------"
                        elif opc==4:
                            diferencia(na,A,nb,B)
                            print"---------------------------------------------------------------------------"
                        elif opc==5:
                            difSimetrica(na,A,nb,B)
                            print"---------------------------------------------------------------------------"
                        else:
                            dif=False
                else:
                    operaciones=False
                        
        else:
            print "Debe ingresar conjuntos"
            print"---------------------------------------------------------------------------"
    else:
        print"                  GRACIAS POR USAR ESTE PROGRAMA"
        print"                          Desarrollador:"
        print"                      HUGO ANGELES CHAVEZ"
        print"---------------------------------------------------------------------------"
        break


    

            







        
        
    
    
